package com.ww.learn.coroutine.flow

import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking

/**
 * 为了表示异步计算的值流，可以使用Flow类型
 * flow的Flow类型构建器函数
 * flow{}构件块中的代码可以挂起
 * 函数simple不再标有suspend修饰符
 * 流使用emit函数发射值
 * 流使用collect函数收集值
 */
fun simple4(): Flow<Int> = flow {
    for (i in 1..3) {
        delay(100)
        emit(i)
    }
}

fun main() = runBlocking {
    launch {
        for (k in 1..3) {
            println("I'm not blocked $k")
            delay(100)
        }
    }
    simple4().collect { value -> println(value) }
}